package br.com.controlador;

import br.com.modelo.Caixa;
import br.com.modelo.Impressora;
import java.io.Serializable;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import util.JPAUtil;
import util.JSFUtil;

/**
 *
 * @author gilberto.costa
 */
@ManagedBean
@ViewScoped
public class ImpressoraControler implements Serializable {

    private List<Impressora> listImpressoras = new ArrayList<Impressora>();
    private Impressora impressora;
    private Character leImp;//usado para o campo le(le é reservado no primefaces)

    @PostConstruct
    public void init() {
        impressora = new Impressora();
        setListImpressoras(Impressora.retornaImpressoras());
    }

    /**
     * @return the impressora
     */
    public Impressora getImpressora() {
        return impressora;
    }

    /**
     * @param impressora the impressora to set
     */
    public void setImpressora(Impressora impressora) {
        Character c = impressora.getLe();
        setLeImp(c);
        this.impressora = impressora;
    }

    public List<Impressora> retornaImpressoras() {
        return Impressora.retornaImpressoras();
    }

    /**
     * @return the listImpressoras
     */
    public List<Impressora> getListImpressoras() {
        return listImpressoras;
    }

    /**
     * @param listImpressoras the listImpressoras to set
     */
    public void setListImpressoras(List<Impressora> listImpressoras) {
        this.listImpressoras = listImpressoras;
    }

    public void inicializaObj() {
        impressora = new Impressora();
    }

    public void excluir() {
        try {
            impressora = impressora.salvar();
            listImpressoras = Impressora.retornaImpressoras();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Impressora excluida!!", "Mensagem"));
            //retornando caixas e salvando nos caixas
            List<Caixa> caixa = CaixaControler.retornaCaixa();
            for (Caixa c : caixa) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    impressora = impressora.salvarCaixas(c.getIp());
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Transferido para caixa(" + c.getNome() + ")", "Mensagem"));
                }
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao excluir cliente!!" + e, "Mensagem"));
        }
    }

    public void salvar() {
        try {
            impressora.setLe(getLeImp());
            impressora = impressora.salvar();
            JSFUtil.addMessageSucesso("Impressora salva!!");
            //retornando caixas e salvando nos caixas
            List<Caixa> caixa = CaixaControler.retornaCaixa();
            for (Caixa c : caixa) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    impressora = impressora.salvarCaixas(c.getIp());
                    JSFUtil.addMessageSucesso("Transferido para caixa(" + c.getNome() + ")");
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgImpressora.hide();");
        } catch (Exception e) {
            JSFUtil.addMessageErro("Problema ao cadastrar a impressora!!" + e);
        }
    }

    public String NovaImpressora(String cadastro) {
        if (cadastro.equalsIgnoreCase("Impressora")) {
            return "../impressora/impressora.jsf";
        } else if (cadastro.equalsIgnoreCase("Empresa")) {
            return "../empresa/empresa.jsf";
        } else {
            return null;
        }
    }

    /**
     * @return the leImp
     */
    public Character getLeImp() {
        return leImp;
    }

    /**
     * @param leImp the leImp to set
     */
    public void setLeImp(Character leImp) {
        this.leImp = leImp;
    }
}
